#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <algorithm> //swap
#include <functional> //less
#include <iomanip>
#include <assert.h>
using namespace std;

template<class T = int, class Comp = less<T> >
class C{
public:
    struct D{
        T x;
        int y;
        D(T xx = T(), int yy = 0):x(xx), y(yy){}
        bool operator < (const D &n) const
        {
            return x > n.x;
        }
    };
    static D a;
    static D b;
    static Comp cmp;
    
    D m;
    C<T,Comp>(T xx = T(), int yy = 0):m(D(xx,yy)){}
    
    static bool less_than(C<T,Comp> a, C<T,Comp> b){
        return cmp(a.m.x, b.m.x);
    }
    
    void show(){
        cout << a.x << " " << a.y << "; " << b.x << " " << b.y << "; " << m.x << " " << m.y << endl;
    }
};
template<class T, class Comp> class C<T,Comp>::D C<T,Comp>::a(T(333), 111); 
template<class T, class Comp> class C<T,Comp>::D C<T,Comp>::b = C<T,Comp>::D(T(444), 222);
template<class T, class Comp> Comp C<T,Comp>::cmp = Comp();

int main()
{
    C<int, greater<int> > cc(10,2), dd(9, 3);
    cc.show();
    dd.show();
    cout << cc.less_than(cc, dd) << endl;
    cout << dd.less_than(dd, cc) << endl;
    return 0;
}
